//package sparkStreaming
//
//import org.apache.spark.SparkConf
//import org.apache.spark.rdd.RDD
//import org.apache.spark.streaming.{Seconds, StreamingContext}
//import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
//import org.junit.Test
//
///**
// * transform 算子是转换算子
// * foreachRDD 算子是行动
// */
//class Transform {
//	@Test
//	def socketTest(): Unit = {
//		val conf: SparkConf = new SparkConf().setAppName("wordcount").setMaster("local[*]")
//
//		// 构建 StreamingContext
//		val streamingContext = new StreamingContext(conf, Seconds(3))
//
//		// 从指定的端口采集数据,
//		val socketLineDStream: ReceiverInputDStream[String] = streamingContext.socketTextStream("localhost", 9999)
//
//
//		// 将结构转换便于统计
//		// TODO 代码，（Driver），只执行一次
//		val mapDStream: DStream[(String, Int)] = socketLineDStream.transform {
//			case rdd => {
//				// TODO 代码，（Driver）,每个批次执行一次，可以动态更新
//				val resRDD: RDD[(String, Int)] = rdd.map {
//					case line => {
//						// TODO 代码，（Executor），每条数据执行一次
//						(line, 1)
//					}
//				}
//
//				resRDD
//			}
//		}
//
//		// reduceByKey 聚合
//		val sumDStream: DStream[(String, Int)] = mapDStream.reduceByKey(_ + _)
//
//		// 打印结果，在Driver打印
//		sumDStream.print()
//
//		// 不能停止采集程序
//		//streamingContext.stop()
//
//		// 启动接收器
//		streamingContext.start()
//		// Driver等待接收器停止
//		streamingContext.awaitTermination()
//	}
//}
